/* eslint-disable */

const OSS = require('ali-oss')
const fs = require('fs')
const path = require('path')
const readline = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout
})

const client = new OSS({
    // yourregion填写Bucket所在地域。以华东1（杭州）为例，Region填写为oss-cn-hangzhou。
    region: 'oss-cn-shanghai',
    // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
    accessKeyId: 'LTAI5tC9V799uk2miW1GvsPN',
    accessKeySecret: '22l0XgjNJF4oOTka8JxMlNfHKir9GF',
    // 填写Bucket名称。关于Bucket名称命名规范的更多信息，请参见Bucket。
    bucket: 'static-pc-crm'
})

// 获取本地文件列表
function getFiles (dir) {
    const jsonFiles = []

    // 遍历递归获取文件目录
    const findFiles = dir => {
        const files = fs.readdirSync(dir)
        files.forEach((item) => {
            const fPath = path.join(dir, item)
            const stat = fs.statSync(fPath)
            if (stat.isDirectory() === true) {
                findFiles(fPath)
            }
            if (stat.isFile() === true) {
                jsonFiles.push(fPath)
            }
        })
    }

    findFiles(dir)
    return jsonFiles
}

// 推送到OSS
async function push () {
    try {
        // 定义目录
        const dir = path.resolve('./dist/')
        const files = getFiles(dir)
        const promiseList = []
       
        // 遍历文件列表上传
        files.forEach(item => {
            console.log(item.replace(dir, '').replace(/[\\]/g, '/'))
            promiseList.push(client.put(item.replace(dir, '').replace(/[\\]/g, '/'), item))
        })

        //等待结果回显
        await Promise.all(promiseList)
        console.log('部署成功')
    } catch (e) {
        console.log(e)
    }
}

// 删除历史文件
async function clearOssFiles(){
    // 获取文件列表
    const result = await client.list({
        // 设置按字母排序最多返回前1000个文件。
      'max-keys': 1000
    })
    // 获取一个月前的日期
    const day = new Date(new Date().setMonth(new Date().getMonth()-1))
    // 获取需要删除的文件列表
    const orderFiles = result.objects.filter(item=> day > new Date(item.lastModified)).map(item=>item.name)
    // 执行删除
    if(orderFiles.length)
        await client.deleteMulti(orderFiles, {quiet: true})
    console.log(`操作成功，本次共删除${orderFiles.length}个文件`)
}

// 删除文件确认逻辑
function clear(){
    readline.question('该操作具有风险性，请确认已经执行过PUSH命令并且已上传完成\r\n该操作将会删除本项目文件夹内一个月前上传的任何文件，是否确认？(Y/n)\r\n', read => {
        if(read===''||read.toLowerCase()==='yes'||read.toLowerCase()==='y'){
            clearOssFiles()
        }
        readline.close()
    })
}

switch(process.argv[2]){
    case 'clear':
        clear()
        break
    case 'push':
        push()
        break
}